const { RES_CODE } = require("../utils/constants")
const { verifyToken } = require("../utils/tokenUtils")

/* 
用于token校验的中间件
*/
module.exports = async (req, res, next) => {

  /* 
  - 解决预检请求被后台的token校验的中间件拦截的问题
- 解决: token校验的中间件不要拦截预检查, 直接放行
  */
  if (req.method==='OPTIONS') {
    next()
    return
  }

  try {
    // 读取请求头中的token
    const token = req.headers['token']
    // 对token进行校验
    const userId = await verifyToken(token)
    // 将用户id保存到req上 => 传递给后面的路由回调
    req.userId = userId
    // 放行请求
    next()
  } catch (error) {
    console.log(error)
    // 失败了, 返回一个401的错误响应
    res.statusCode = 401
    res.send({
      code: RES_CODE.DATA_ERROR,
      message: error.message
    })
  }
}